<?php
//Поехали!
$start_time = microtime(true);

//Загрузка конфигурации
$config = array();
//Конфигурация сборки
require_once('builder/config.php');
//Конфигурация фреймворка
require_once('framework/config.php');
//Внутренняя конфигурация фреймворка
require_once('framework/system_config.php');
//Установка констант
require_once('framework/constants.php');
//Загружаем все необходимые файлы
require_once('framework/loading.php');
//Объект Config хранит все конфигурационные файлы
Config::set($config);

//Будем использовать UTF-8
mb_internal_encoding("UTF-8");

//Парсим url. Выделяем имя контроллера, имя метода и параметры
extract(Router::request());

//Загружаем конфигурацию приложения
require_once($application.'/config.php');
Config::set($config);
unset($config);

//Устанавливаем соединение с базой данных
$db_params = Config::get('db');
DB::initialize($db_params);

//Сохраняем для будущего использования
Local::set('controller', $controller_name);
Local::set('method', $method_name);

//Устнавливаем путь к приложению
Path::setApplication($application);

//Для сервисов загружаем сообщения
if ($is_service)
    Messager::initialize($application);

//Проверяем есть ли контроллер, соответсвующий запросу
$is_controller = FALSE;
$is_method = FALSE;
$file_name = Path::controller($controller_name, $is_service);

if (file_exists($file_name)) {
    require_once($file_name);
    $controller = new Controller($params);
    $is_controller = TRUE;

    if (method_exists($controller, $method_name)) {
       $controller->$method_name();
       $is_method = TRUE;
    }
}

if (!$is_controller) {
	if ($application == 'administration')
	    $controller = new AdmController();
	else
	    $controller = new AppController();
}

unset($controller);

//Выводим информацию о работе скрипта
//Находится вне каких-либо контекстов чтобы быть точной
if (Config::get('is_developer') && !$is_service)
    require_once(Path::system_view('developer_panel'));

//La commedia è finita
die();


?>